<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
  <script>
    // 1. 迭代器(iterator)是一种接口 为各种不同的数据结构提供统一的访问机制
    // 任何数据结构只要部署 iterator 接口,就可以完成遍历操作

    //es6创造了一种新的遍历循环 for...of,  inerator 接口主要为 for...of 服务
    // 具备iterator接口的数据(可以用for...of循环的)

    const team = ['theshy', 'ning', 'rookie', '杰克爱', '宝蓝']

    // // for...of得到的是键值
    // for (let v of team) {
    //   console.log(v);
    // }
    // // for...in 循环 得到的是索引号也就是键名 
    // for (let v in team) {
    //   console.log(v);
    // }


    // 2. 生成器函数是ES6提供的一种异步编程解决方案
    // 声明生成器函数  函数名和function 之间加个* 
    function* gen () {
      // console.log('我是生成器函数');

      console.log(111);
      // yield函数代码的分隔符  三个yield产生四块代码
      yield '我是yield1';

      console.log(222);
      yield '我是yield2';

      console.log(333);
      yield '我是yield3';

      console.log(444);
    }


    let iterator = gen()
    // 通过next方法 让代码运行
    // 如果有yield分隔符 一个next只会调用第一段代码
    console.log(iterator.next()); // 会返回第一个yield里面的结果 第几个next 调用第几个结果
    iterator.next() // 111
    iterator.next() // 222
    iterator.next() // 333
    iterator.next() // 444



  </script>
</body>

</html>